/*
 * @Author: Li Zengkun
 * @Date: 2022-09-12 20:00:18
 * @LastEditors: Li Zengkun
 * @LastEditTime: 2022-09-16 18:32:26
 * @Description: 
 */
import axios from "axios"

import { ElNotification } from "element-plus"

// 路由设置
import router from '@/router/'

// 设置默认 BaseURL
axios.defaults.baseURL = "http://localhost:3001";

// withCredentials是XMLHttpRequest的一个属性，
// 表示跨域请求是否提供凭据信息(cookie、HTTP认证及客户端SSL证明等)
axios.defaults.withCredentials = true;

/**
 * @description: 请求拦截器
 * @return {*}
 */
axios.interceptors.request.use((config) => {
    // 登陆注册API可以不携带token
    if (config.url.includes("/login") || config.url.includes("/register")) {
        return config
    }
    // 图片上传
    if (config.url.includes("/upload")) {
        console.log("图片上传");
        config.headers["Content-Type"] = `multipart/form-data`

    }
    // 获取token，判断是否已经登陆
    let { token } = sessionStorage;
    // 拥有token，在header头添加token
    if (token) {
        config.headers.Authorization = `Bearer ${token}`
    }
    return config
}, (error) => {
    return Promise.reject(error)
})

// 响应拦截器
axios.interceptors.response.use((res) => {
    // console.log(res);

    if (res.status === 200) {
        return res.data
    }
}, ({ response, message }, _, resp) => {

    // console.log(response);
    // console.log(message);

    // ElNotification({
    //     type: "error",
    //     title: response.status,
    //     message: message
    // })

    // resp == undefined , 请求未发出，跨域错误
    // if (!resp) {
    //     ElNotification({
    //         type: "error",
    //         title: message,
    //         message: `API接口："${url}" 错误`
    //     })
    //     return
    // }
    // response 响应返回
    let { status, data, statusText } = response

    // console.log(status);

    console.log(response);
    switch (status) {
        case 401:
            // 提示用户需要身份验证(expiredAt:过期时间戳)
            // let expiredTime = new Date(date.inner.expiredAt).toLocaleString()
            ElNotification({
                type: "error",
                title: `错误：${status}`,
                message: "登陆过期，请重新登录"
            })

            // 强制跳转登录，携带redirect参数，实现重定向
            router.replace('/login')
            break;
        case 404:
            ElNotification({
                type: "error",
                title: `错误：${status}`,
                message: `API接口："${url}" 地址不存在!`
            })
            break;
        case 500:
            ElNotification({
                type: "error",
                title: `错误：${status}`,
                message: `API接口："${url}" 错误，请联系后台开发！`,
            });
            break;
        default:
            ElNotification({
                type: "error",
                title: `错误：${status}`,
                message: message,
            });
            break;
    }
})

export default axios